package com.lovegu.one;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 实现自联想器
 * </p>
 *
 * @author 老顾
 * @since 2023/3/28
 */
public class AutoAssociator {

    private final Map<String, Set<String>> associations;

    public AutoAssociator() {
        associations = new HashMap<>();
    }

    public void addAssociation(String word1, String word2) {
        addWordToSet(word1, word2);
        addWordToSet(word2, word1);
    }

    private void addWordToSet(String word, String associatedWord) {
        // computeIfAbsent：如果指定的键在 Map 中不存在，则尝试使用给定的函数计算该键的值，并将其插入到 Map 中。
        Set<String> set = associations.computeIfAbsent(word, k -> new HashSet<>());
        set.add(associatedWord);
    }

    public Set<String> getAssociations(String word) {
        return associations.get(word);
    }

    public static void main(String[] args) {
        AutoAssociator aa = new AutoAssociator();
        aa.addAssociation("苹果", "水果");
        aa.addAssociation("橘子", "水果");
        aa.addAssociation("香蕉", "水果");
        aa.addAssociation("胡萝卜", "蔬菜");
        aa.addAssociation("芹菜", "蔬菜");

        // 橘子 能联想到 水果
        System.out.println("橘子能联想到: " + aa.getAssociations("橘子"));
        // 水果 能联想到 苹果, 橘子, 香蕉
        System.out.println("水果能联想到: " + aa.getAssociations("水果"));
        // 蔬菜 能联想到 胡萝卜, 芹菜
        System.out.println("蔬菜能联想到: " + aa.getAssociations("蔬菜"));
    }

}
